﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace GalaktikaERPHelper.AtlantisDataTypeConversions.Extensions
{
    public static class CompValueConvertMethods
    {

        public static string ToHexString(this byte[] value)
        {
            return String.Concat("0x", BitConverter.ToString(value).Replace("-", ""));
        }
        public static byte[] ToComp(this string value)
        {
            if (!value.StartsWith("0x"))
                throw new ArgumentException("Строка для преобразования должна начинаться с \"0x\"");
            if (value.Length % 2 != 0)
                throw new ArgumentException("Строка для преобразования неверной длинны");
            byte[] res = new byte[8];
            for (int i = 1; i < value.Length / 2; i++)
            {
                res[i - 1] = byte.Parse(value.Substring(i * 2, 2), System.Globalization.NumberStyles.HexNumber);
            }
            return res;
        }
        public static long ToLong(this byte[] value)
        {
            long res = 0;
            for (int i = 0; i < value.Count(); i++)
            {
                res = (res << 8) + (value[i] & 0xff);
            }
            return res ^ -9223372036854775808;
        }
        public static byte[] ToComp(this long value)
        {
            return BitConverter.GetBytes(value ^ -9223372036854775808).Reverse().ToArray();
        }
        public static int ToInt(this byte[] value)
        {
            int res = 0;
            for (int i = 0; i < value.Count(); i++)
            {
                res = (res << 8) + (value[i] & 0xff);
            }
            return res;
        }
        public static int ToInt(this byte value)
        {
            int res = 0;
            res = (res << 8) + (value & 0xff);
            return res;
        }
        internal static byte[] IntToBytes(this int value)
        {
            return BitConverter.GetBytes(value).Reverse().ToArray();
        }
    }
}
